package com.irdstudio.efp.ctr.service.dao;

import com.irdstudio.basic.framework.core.bean.SedSynCusManageVO;
import com.irdstudio.efp.console.service.vo.PrdInfoVO;
import com.irdstudio.efp.ctr.service.domain.CtrLoanCont;
import com.irdstudio.efp.ctr.service.vo.CtrLoanContVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * <p>DAO interface:贷款合同表				<p>
 * @author chenqm1
 * @date 2018-05-04
 */
public interface CtrLoanContDao {
	
	public int insertCtrLoanCont(CtrLoanCont ctrLoanCont);
	
	public int deleteByPk(CtrLoanCont ctrLoanCont);
	
	public int updateByPk(CtrLoanCont ctrLoanCont);
	
	public CtrLoanCont queryByPk(CtrLoanCont ctrLoanCont);
	
	public CtrLoanCont queryByCondition(CtrLoanCont ctrLoanCont);
	
	public List<CtrLoanCont> queryAllOwnerByPage(CtrLoanContVO ctrLoanCont);
	
	public List<CtrLoanCont> queryAllCurrOrgByPage(CtrLoanContVO ctrLoanCont);
	
	public List<CtrLoanCont> queryAllCurrDownOrgByPage(CtrLoanContVO ctrLoanCont);

	public List<CtrLoanCont> queryAllCurrOwnerPrdByPage(CtrLoanContVO ctrLoanCont);

	public List<CtrLoanCont> queryListByConditionByPage(CtrLoanCont ctrLoanCont);
	
	
	public List<CtrLoanCont> queryListBySemiCloseByPage(CtrLoanContVO ctrLoanCont);
	
	/**
	 * 分批查询借款合同信息，供批次生成文件
	 * @param start 数据开始
	 * @param end 数据结束
	 * @return List<CusIndiv>
	 */
	public List<CtrLoanCont> queryAllCtrInTurn(int start,int batchNum);
	/**
	 * 获取表数据总数
	 * @return
	 */
	public int queryCtrCount(CtrLoanCont ctrLoanCont);
	
	/**
	 * 获取表数据
	 * @return
	 */
	public List<CtrLoanCont> queryListByDateAndLimit(Map<String,Object> map);
	
	/**
	 * 根据合同号列表查询合同列表信息
	 * @param contNos
	 * @return
	 */
	public List<CtrLoanCont> queryCtrLoanContListByContNos(@Param("contNos") List<String> contNos);
	
	
	/**
	 * 分批查询借款合同信息，供批次生成文件
	 * @param Map 
	 * @return List<CusIndiv>
	 */
	public List<CtrLoanCont> queryListByCondAndLimit(Map<String,Object> map);
	/**
	 * 根据授信协议查询客户证件号码
	 * @return
	 */
	public List<String> queryContNoByLmtContNo(@Param("lmtContNo") String lmtContNo);
	
	/**
	 * 条件分页查询
	 * @param ctrLoanContVO
	 * @return
	 */
	public List<CtrLoanCont> queryByConditionByPage(CtrLoanContVO ctrLoanContVO);
	
	/**
	 * 条件查询不分页
	 * @param ctrLoanContVO
	 * @return
	 */
	public List<CtrLoanCont> queryListByCondition(CtrLoanContVO ctrLoanContVO);
	
	/**
	 * 查询生效 与 已出账合同列表
	 * @param ctrLoanContVO
	 * @return
	 */
	public List<CtrLoanCont> queryFrozenListByConditionByPage(CtrLoanContVO ctrLoanContVO);
	/**
	 * 根据合同号更新合同状态
	 * @param contNos
	 * @param contState
	 * @return
	 */
	public int updateContStatusByContNos(@Param("contNos") List<String> contNos, @Param("contState") String contState);

	 //查询用户权限数据 ——专项检查 
	public List<CtrLoanCont> queryByOwnerByPage(CtrLoanContVO ctrLoanContVO);
	//查询当前机构权限数据——专项检查
	public List<CtrLoanCont> queryByCurrOrgByPage(CtrLoanContVO ctrLoanContVO);
	//查询当前机构及下属机构权限数据——专项检查 
	public List<CtrLoanCont> queryByCurrDownOrgByPage(CtrLoanContVO ctrLoanContVO);
	//查询税务信息的贷款合同信息明细
	public List<CtrLoanCont> queryListBySydInfo();
	
	//查询税务信息的贷款客户信息明细
	public List<CtrLoanCont> queryCusListBySydInfo();
	
	/**
	 * 获取第一条记录
	 * @param ctrLoanContVO
	 * @return
	 */
	public CtrLoanCont queryFirstCtrLoanCont(CtrLoanContVO ctrLoanContVO);

	/**
	 * 检查合同是否已签订
	 * @param serno
	 * @return
	 */
    public int getContSignedCountBySerno(@Param("serno") String serno);

	public List<CtrLoanCont> querySydListByCertcode(CtrLoanContVO ctrLoanContVO);

	//20190121 wanglh
	public CtrLoanCont queryContNo(CtrLoanCont queryCtrLoanCont);
	
	/**
	  * 通过客户编号查询信息
	  * @param ctrLoanCont
	  * @return
	  * @author qiuyf
	  * @since 2019年2月20日 下午4:03:39
	  * @version 1.0
	 */
	public List<CtrLoanCont> queryAllByCusIdByPage(CtrLoanCont ctrLoanCont);
		/**
	 * 需求编号：【2019D0519】（业务提的需求编号）
	 * 问题编号：【xxxxxxx】（若不是因为修复问题而新增该类，则留空）
	 * 开发人员：qiuyf
	 * 创建日期：2019年4月30日 下午6:15:00
	 * 功能描述：通过业务流水号、合同类型查询合同编号
	 */
	public CtrLoanCont qryBySernoAndContTyp(CtrLoanCont ctrLoanCont);
	 /**
		 * 
		 * 用信申请文件信息临时表数据修改合同信息表有数据则更新，无则新增 <br>
		 * 0.1:weijj:2019年5月7日 下午2:37:18:新增 <br>
		 * 
		 * @author weijj
		 * @since 2019年5月7日 下午2:37:18
		 * @date 2019年5月7日 下午2:37:18
		 * @version 0.1
		 */
		public int insertOrUpdateCtrLoanCont(List<CtrLoanCont> list);

		public int batchUpdate(List<CtrLoanCont> list);


	/**
	 * 开发人员：【chenxuan】
	 * 创建/修改日期：【2019/6/4】
	 * 修改描述：批量变更客户经理
	 * @Param [SedSynCusManageVOList]
	 * @return int
	 **/
//		@author:liuty
//		@date:2019/10/17
//		涉及产品:税e贷
//		功能:批量变更客户经理
//		原因:增量投产只投了接口没投实现，因此注释，不影响当前产品实际业务
//	public int batchUpdateCusManage(@Param(value = "sedSynCusManageVO")List<SedSynCusManageVO> sedSynCusManageVO);
	/**
	 * 插入两条合同数据<br>
	 * 0.2:wanglihua:2019年5月5日 下午4:32:02:TODO <br>
	 *
	 * @author wanglihua
	 * @date 2019年5月5日 下午4:32:02
	 * @version 0.1
	 * @since 2019年5月5日 下午4:32:02
	 */
	public int insertCtrLoanContList(@Param("list") List<CtrLoanCont> ctrLoanConts);
	/**
	 * 签章明细登记信息查询<br>
	 *
	 * @author wanglihua
	 * @date 2019年5月7日 上午9:32:32
	 * @version 0.1
	 * @since 2019年5月7日 上午9:32:32
	 */
	public CtrLoanCont queryInfosByPk(CtrLoanCont queryCtrLoanCont);

	/**
	 * T查询合同号做条件进行签章明细登记信息查询<br>
	 *
	 * @author wanglihua
	 * @date 2019年5月7日 上午9:32:32
	 * @version 0.1
	 * @since 2019年5月7日 上午9:32:32
	 */
	public List<CtrLoanCont> queryContNo4Condition(CtrLoanCont ctrLoanCont);

	/**
	 * 授信合同查询<br>
	 *
	 * @author wanglihua
	 * @date 2019年5月7日 下午3:38:31
	 * @version 0.1
	 * @since 2019年5月7日 下午3:38:31
	 */
	public List<CtrLoanContVO> queryCreditContByPage(CtrLoanCont ctrLoanCont);
	public int batchUpdateCusManage(@Param(value = "sedSynCusManageVO")List<SedSynCusManageVO> sedSynCusManageVO);

	/**
	 * 根据产品id查询增量数据
	 *
	 * @param prdInfoVOS
	 * @return
	 */
    List<CtrLoanContVO> queryIncrementalData(@Param("prdInfoVOS") List<PrdInfoVO> prdInfoVOS, @Param("batchDate") String batchDate);
	    /**
	 *
	 * 需求编号：【】（业务提的需求编号）
	 * 问题编号：【3312/3313】（若不是因为修复问题而新增该类，则留空）
	 * 开发人员：【wanglh4】
	 * 创建日期：【2019年7月24日】
	 * 功能描述：签章明细页面查询方法，先查合同表再查签章明细表，然后拼接字段
	 */
	public List<CtrLoanCont> queryCfcaInfosByPage(CtrLoanCont ctrLoanCont);

	/**
	 *
	 * 根据用信申请流水号查询一条合同数据
	 *
	 * @author wanglihua
	 * @params  * @param null
	 * @return
	 * @since 2019/11/14 10:00
	 * @date 2019/11/14 10:00
	 * @version 0.1
	 */
	public CtrLoanCont queryOneCtrData(@Param("serno") String serno);

	/**
	 * 根据授信申请流水号和合同类型查询合同签订记录
	 * @param lmtContNo
	 * @param contType
	 * @return
	 */
	CtrLoanCont queryContNoByLmtContNoAndContype(@Param("lmtContNo") String lmtContNo, @Param("contType") String contType);

	/**
	 * 根据授信协议号更新授信合同状态
	 *
	 * @author xieziwei
	 * @params  * @param null
	 * @return
	 * @since 2020/10/13 18:27
	 * @date 2020/10/13 18:27
	 * @version 0.1
	 */
	int updateStateByLmtContNo(CtrLoanCont ctrLoanCont);
}